#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/ipc.h>
#include <sys/msg.h>

#include "deamon-ipc.h"
#include "bash.h"

int msgCreate(const char *pathname,  char proj_id)
{
    int msgId = -1;
    key_t key = ftok(pathname, proj_id);
    msgId = msgget(key, IPC_CREAT|0666 );
    return msgId;
}

int msgSend(int msgId, struct message msg, bool isBlock)
{
    int ret = -1;
    int msgflg = 0;
    if(msgId < 0){
        printf("msgid error\n");
        return -1;
    }
    if (false == isBlock)
    {
        msgflg |= IPC_NOWAIT;
        printf("no block\n");
    }
    printf("send len %ld\n", sizeof(msg.msgText));
    ret = msgsnd(msgId, &msg, sizeof(msg.msgText), msgflg);
    return ret;
}

int msgSendtest(int msgId, struct message *msg, bool isBlock)
{
    int ret = -1;
    int msgflg = 0;
    if(msgId < 0){
        printf("msgid error\n");
        return -1;
    }
    if (false == isBlock)
    {
        msgflg |= IPC_NOWAIT;
        printf("no block\n");
    }
    printf("send len %ld\n", sizeof(msg->msgText));
    ret = msgsnd(msgId, msg, sizeof(msg->msgText), msgflg);
    return ret;
}

int msgRecv(int msgId, struct message msg, int msgType, bool isBlock)
{
    int ret = -1;
    int msgflg = 0;
        if(msgId < 0){
        printf("msgid error\n");
        return -1;
    }
    if (false == isBlock)
    {
        msgflg |= IPC_NOWAIT;
        // printf("no block\n");
    }
    printf("recv len %ld\n", sizeof(msg.msgText));
    ret = msgrcv(msgId, &msg, sizeof(msg.msgText), msgType, msgflg);
    return ret;
}

int msgRecvtest(int msgId, struct message *msg, int msgType, bool isBlock)
{
    int ret = -1;
    int msgflg = 0;
        if(msgId < 0){
        printf("msgid error\n");
        return -1;
    }
    if (false == isBlock)
    {
        msgflg |= IPC_NOWAIT;
        // printf("no block\n");
    }
    printf("recv len %ld\n", sizeof(msg->msgText));
    ret = msgrcv(msgId, msg, sizeof(msg->msgText), msgType, msgflg);
    return ret;
}

